/**
* <p>Title: StringCompare.java</p>
* <p>Description: </p>
* <p>Company: www.huoyunren.com</p>
* @author duanxiangyun
* @date 2016年12月28日
* @version 1.0
*/
package com.hxbd.test.utils;

import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;
import org.testng.Assert;

import com.alibaba.fastjson.JSONObject;
import com.duan.test.utils.common.CommonUtils;
import com.hxbd.service.ObjectCompareService;


public class ObjectCompare implements ObjectCompareService{
	// 以下方法主要针对返回结果不是json的结果的断言方法
		/**
		 * 是否非空 excel中调用方式为notNull()
		 * 
		 * @param result
		 */
		public static void notNull(String result) {
			Assert.assertTrue(result != null);
		}

		/**
		 * 是否空 excel中调用方式为isNull()
		 * 
		 * @param result
		 */
		public static void isNull(String result) {
			Assert.assertTrue(result == null);
		}

		/**
		 * result是否包含str excel调用方式:contains(str)
		 * 
		 * @param result
		 * @param str
		 */
		public static void contains(String result, String str) {
			Assert.assertTrue(result.contains(str));
		}

		/**
		 * result是否等于str excel调用方式:equals(str)
		 * 
		 * @param result
		 * @param str
		 */
		public static void equals(String result, String str) {
			Assert.assertTrue(result.equals(str));
		}

		/**
		 * 判断str1是否大于str2，excel调用方式:greaterThan(str1,str2)
		 * @param str1
		 * @param str2 
		 * @return Boolean
		 */
		public static Boolean greaterThan (String str1, String str2) {
			Boolean bol = false;
			Boolean bol2 = false;
			if (!str1.contains("0000-00-00 00:00:00") && !CommonUtils.isStrEmpty(str1) && !str1.equalsIgnoreCase("null")) {
				List<DateFormats> l = Arrays.asList(DateFormats.values());
				for (DateFormats d : l) {
					String format = d.getValue();
					if (InterfaceUtils.isValidDate(str1, format))
					{
						bol = InterfaceUtils.isBeforeDate(str2,str1, format);
						bol2 = true;
						break;
					}
				}
				if (!bol2) {
					bol = Double.parseDouble(str1) > Double.parseDouble(str2);
				}
				return bol;
			}		
			else {
				return true;
			}
		}
		
		/**
		 * 判断str1是否小于str2,excel调用方式:lessThan(str1,str2)
		 * @param str1
		 * @param str2 
		 * @return Boolean
		 */
		public static Boolean lessThan (String str1, String str2) {
			Boolean bol = false;
			Boolean bol2 = false;
			if (!str1.contains("0000-00-00 00:00:00") && !CommonUtils.isStrEmpty(str1) && !str1.equalsIgnoreCase("null")) {
				List<DateFormats> l = Arrays.asList(DateFormats.values());
				for (DateFormats d : l) {
					String format = d.getValue();
					if (InterfaceUtils.isValidDate(str1, format))
					{
						bol = InterfaceUtils.isBeforeDate(str1,str2, format);
						bol2 = true;
						break;
					}
				}
				if (!bol2) {
					bol = Double.parseDouble(str1) < Double.parseDouble(str2);
				}
				return bol;
			}		
			else {
				return true;
			}
		}
		
		/**
		 * 判断字符串是否可以转化为json对象
		 * 
		 * @param content
		 * @return
		 */
		public static boolean isJsonObject(String content) {
			// 此处应该注意，不要使用StringUtils.isEmpty(),因为当content为"
			// "空格字符串时，JSONObject.parseObject可以解析成功，
			// 实际上，这是没有什么意义的。所以content应该是非空白字符串且不为空，判断是否是JSON数组也是相同的情况。
			if (StringUtils.isBlank(content))
				return false;
			try {
				JSONObject.parseObject(content);
				return true;
			} catch (Exception e) {
				return false;
			}
		}
		/**
		 * 判断字符串是否可以转化为json对象
		 * 
		 * @param content
		 * @return
		 */
		public static boolean isJsonArray(String content) {
			// 此处应该注意，不要使用StringUtils.isEmpty(),因为当content为"
			// "空格字符串时，JSONObject.parseObject可以解析成功，
			// 实际上，这是没有什么意义的。所以content应该是非空白字符串且不为空，判断是否是JSON数组也是相同的情况。
			if (StringUtils.isBlank(content))
				return false;
			try {
				JSONObject.parseArray(content);
				return true;
			} catch (Exception e) {
				return false;
			}
		}
		/**
		 * 判断字符串是否可以转化为json
		 * 
		 * @param content
		 * @return
		 */
		public static boolean isJson(String content) {
			// 此处应该注意，不要使用StringUtils.isEmpty(),因为当content为"
			// "空格字符串时，JSONObject.parseObject可以解析成功，
			// 实际上，这是没有什么意义的。所以content应该是非空白字符串且不为空，判断是否是JSON数组也是相同的情况。
			if (StringUtils.isBlank(content))
				return false;
			try {
				JSONObject.parse(content);
				return true;
			} catch (Exception e) {
				return false;
			}
		}
		/**
		 * 判断字符串是否为非负整数
		 * @param str
		 * @return
		 */
		public static boolean isNumeric(String str)
		{
		    Pattern pattern = Pattern.compile("[0-9]*");
		    Matcher isNum = pattern.matcher(str);
		    return isNum.matches();
		}
}
